#-*- coding:utf-8 -*-
'''
Created on 14.02.2010

@author: hu1salh1
'''
from SQL_PAUK_Class import SQL_PAUK
from Connect_PAUK_Class import Connect_PAUK
import sys
from thread import start_new_thread
sQl=SQL_PAUK()

def callPeriodically(timeout,func,*args):
    from time import sleep
    def callback(to,f,a):
        while True:
            f(*a)
            sleep(to)
    start_new_thread(callback,(timeout,func,args))

def data_stream():
    from Queue import Queue,Empty
    conn=Connect_PAUK()
    Data=Queue()

    def worker():
        buf=[]
        while True:
            try:
                buf.append(Data.get(1,60)) # ждем 60 сек, если получили данные, то в буфер,
                Data.task_done() # (тут сообщаем, что данные взяли, и её можно не хранить в Data)
            except Empty: # если не получили,            
                if buf:
                    sQl.insert_frame_device(buf) # то отправляем все, что скопилось
                    buf=[] # и чистим буфер

    start_new_thread(worker,())
    for diction in conn.serve_clients():
        try:
            ip_frame=diction.pop('IP')
            mac_frame=diction.pop('MAC')
            frame_name=diction.pop('SYSTEM_N')
            frame_caption=diction.pop('SYSTEM_C')
            for k,v in diction.iteritems():
                # вставить проверку на соответствие формату IP4 вместо ip_frame[0]
                Dat=[None,k,v.encode('utf8'),frame_name,frame_caption,ip_frame[0],mac_frame,None,None]
                Data.put(Dat)  
        except:
            print 'shit happened'
            sys.excepthook(*sys.exc_info())
    
            
def Db_ver():
    ver=sQl.ver_info()
    print "server version:",ver
    
def main():
    #from thread import start_new as th
    Db_ver()
    callPeriodically(1200,sQl.find_alert) # вызов через 20 мин.
    data_stream()

try:
    if __name__ == '__main__':
        main()
    
except Exception, edata:
    ret = 0
    sys.exit(ret)